package com.tl.ip_location_relation_v4.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {
	private static Connection conn = null;// 数据库连接
	/**
	 * 静态代码块,类加载的时候执行,仅执行一次
	 */
	static {
		try {
			Class.forName(ConfigUtil.getConfig("driver"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月9日
	 * @param null
	 * @return conn 数据库连接对象
	 * @Description 根据properties获取数据库连接
	 */
	public static Connection getConnection() {
		String url = ConfigUtil.getConfig("url");
		String username = ConfigUtil.getConfig("username");
		String password = ConfigUtil.getConfig("password");
		try {
			if (url.equals(null) || url.trim().length() == 0) {
				return null;
			}

			if (username.equals(null) || username.trim().length() == 0) {
				return null;
			}

			if (password.equals(null) || password.trim().length() == 0) {
				return null;
			}
			conn = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月9日
	 * @param conn
	 *            数据库连接
	 * @param ps
	 *            数据库连接
	 * @param rs
	 *            数据库连接
	 * @return
	 * @Description 释放数据库资源
	 */
	public static void release(Connection conn, Statement ps, ResultSet rs) {
		try {
			if (conn != null) {
				conn.close();
			}
			if (ps != null) {
				ps.close();
			}
			if (rs != null) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月9日
	 * @param conn
	 *            数据库连接
	 * @return
	 * @Description 释放数据库资源
	 */
	public static void release(Connection conn) {
		release(conn, null, null);
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月9日
	 * @param conn
	 *            数据库连接
	 * @param ps
	 *            数据库连接
	 * @return
	 * @Description 释放数据库资源
	 */
	public static void release(Connection conn, Statement ps) {
		release(conn, ps, null);
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月12日
	 * @param
	 * @return
	 * @Description 获取数据库操作对象
	 */
	public static Statement getStatement(Connection conn) {
		Statement statement = null;
		try {
			statement = conn.createStatement();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return statement;
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月12日
	 * @param
	 * @return
	 * @Description 执行sql语句
	 */
	public static void executeSql(String sql, Statement st) {
		try {
			st.execute(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月12日
	 * @param
	 * @return
	 * @Description 清空表
	 */
	public static void clearTable(Connection conn, String table) {
		executeSql("truncate " + table, getStatement(conn));
	}

	/**
	 * 
	 * @author Antg
	 * @date 2021年7月13日
	 * @param tableName数据表名
	 * @return ture 是空表 false 不是空表
	 * @Description 判断是否是空表
	 */
	public static boolean ifEmptyTable(Connection conn, String tableName) {
		boolean flag = true;
		String sql = "select count(1) as num from " + tableName;
		Statement statement = null;
		ResultSet resultSet = null;
		try {
			statement = conn.createStatement();
			resultSet = statement.executeQuery(sql);
			resultSet.next();
			int result = resultSet.getInt(1);
			if (result > 0) {
				flag = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 不释放连接
			release(null, statement, resultSet);
		}
		return flag;
	}
}
